package zhoug.common.base.webview;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.webkit.WebSettings;
import android.webkit.WebView;

/**
 * WebView Setting工具
 *
 * @Author 35574
 * @Date 2021/10/25
 * @Description
 */
public class WebViewUtils {
    private static final String CHARSET = "UTF-8";
    public static final String MIMETYPE_TEXT_HTML = "text/html; charset=UTF-8";
    /**
     * 默认文字大小,大于0时生效
     */
    private static int defaultFontSize = 0;

    public static void setDefaultFontSize(int defaultFontSize) {
        WebViewUtils.defaultFontSize = defaultFontSize;
    }

    @SuppressLint("SetJavaScriptEnabled")
    public static WebSettings settingsConfig(WebView webView) {
        WebSettings settings = webView.getSettings();
        //移除有风险的webview系统隐藏接口
        webView.removeJavascriptInterface("searchBoxJavaBridge_");
        webView.removeJavascriptInterface("accessibility");
        webView.removeJavascriptInterface("accessibilityTraversal");
        //在Android4.2版本以前,由于没有正确限制使用WebView.addJavascriptInterface方法，
        // 攻击者可通过使用Java反射调用机制远程执行任意Java代码。
        settings.setJavaScriptEnabled(true);//是否启用JavaScript
        settings.setAllowFileAccess(false);//Webview file域同源策略绕过漏洞,禁止使用 file 域
        settings.setAllowFileAccessFromFileURLs(true);
        settings.setAllowUniversalAccessFromFileURLs(true);
        settings.setCacheMode(WebSettings.LOAD_DEFAULT);//启用缓存
        settings.setDatabaseEnabled(true);//启用数据库
        settings.setDomStorageEnabled(true);//启用文档存储
        settings.setSupportMultipleWindows(true);//支持多窗口
        settings.setSupportZoom(true); // 支持缩放
        settings.setBuiltInZoomControls(true);// 设置显示缩放按钮
        settings.setSavePassword(false);//不保存密码,WebView储存安全
        //适配屏幕
        settings.setUseWideViewPort(true);//设置true,才能让Webivew支持<meta>标签的viewport属性
        //自适应屏幕,支持内容重新布局,一共有四种方式,默认的是NARROW_COLUMNS
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        settings.setLoadWithOverviewMode(true);
        settings.setDisplayZoomControls(true);
        if (defaultFontSize > 0) {
            settings.setDefaultFontSize(defaultFontSize);
        }
        //默认编码
        settings.setDefaultTextEncodingName(CHARSET);
        // 让JavaScript可以自动打开windows
        settings.setJavaScriptCanOpenWindowsAutomatically(true);

        return settings;
    }


    /**
     * 在{@link Activity#onBackPressed()}中调用
     *
     * @param webView
     * @param activity
     */
    public static void onBackPressed(WebView webView, Activity activity) {
        if (webView != null && webView.isFocused() && webView.canGoBack()) {
            webView.goBack();//返回上一页
        } else {
            if (activity != null) {
                activity.finish();
            }
        }
    }


}
